{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "18fb57aa",
   "metadata": {},
   "source": [
    "# 5. Modules"
   ]
  },
  {
   "attachments": {
    "image-2.png": {
     "image/png": "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ojOZmQde97rXtbYyBpn/5umoOG10q1vd6hiLszMLWWPEIYcc0sbIH//4x62sNWbfrORxCg877LDht7/97VQe6v7JT35yatwygeyHvffee3jHO94xXPayl92q/wO2jDyVZuMisF07btMmrfWG2iBkZfMLX/jC8IY3vGHhrsx6lx9+vcOQsLVetwVes2TKBCz+ZS972eBPh0N9HLwNXF//+teHV77ylav+eDfpx9dZ9ZoVPs7v+VWvelUz8DiOVr4YP+P8r33taydZxflol5/+9KfDPvvsM5zvfOebxM+7GfOdl3Zrxl3oQhcabnazm80sQltY2V8LBZdpeRbVO5PjtLzrEdaX/7a3vW0YLwrM6mPLyNXzHsuK7yzeSasPMLYZ8tMMKe3whz/8oRkqz33uc5OtXeeVvSrh0Q/0+CpXuUpbdBAk/1p5zEs/Ly7yzCsz+ceY/eY3v1nKUEs+K9ff/OY3Wx6OX09J04f195GhD1t0vzl58OSI77HHHo39sjyMOS9+8YuniqTf0qMxLcu7z7dMHmkWpRvjffjKn9ae7GQn64uaep++R/991M0f1S9Di2SaF59yZ5XTz1mz0swKH2MxK13CyTJNnnnyJ++8Kx16/etfv9S8tfvuuzenAj/lzquDP1i/xjWuMa/ozYpLfd/5zncOt771rRsP+rCIyJq8s9LCd16dkk95b33rW/N4jOsy8owzpW3ZD2yjz372s3Pn5XH+ej7uIbBY6zcgJn0nzL1rOl7uE7c5Vfj4xz8+3PWud20r4C984QuHhz/84cOXvvSlCStGgcn2Ihe5yHDd6153sHsRkvfKV77y8KQnPakF3fjGNx4ucYlLDO973/vaADJPrsTd5S53Gc5//vMP17rWtYaPfexjYT33miOG//7v/z7c8pa3HPbaa6/BCruVZ6tmW0IZ/Fw/8YlPDG9605vWvBvzxCc+sa3EPfaxjx0YYShtxll60IMe1PA2MVvdE5YdzuAyqw528LQDzO585zsPdlWWJYPlpS51qeE0pznNYNftCU94QtttSn4T0Q1veMPhtre9bYIm7Rj5DzrooGHnnXeexLvJgLznnnsOF77whYeLX/zig3TLEIPz7ne/+/DABz5w+MhHPtLKfsADHjDJCpf73e9+gwn129/+9mBneJdddml1T6K//e1vw73vfe/hXOc613C1q11t+OpXv9qi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"
    }
   },
   "cell_type": "markdown",
   "id": "6a2b0516",
   "metadata": {},
   "source": [
    "![image-2.png](attachment:image-2.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "73ffcfd2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ce18a0c0",
   "metadata": {},
   "outputs": [],
   "source": [
    "built-in modules\n",
    "\n",
    "- math\n",
    "- random\n",
    "- os\n",
    "- sys\n",
    "- datetime\n",
    "- import module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "009fca4e",
   "metadata": {},
   "outputs": [],
   "source": [
    "custom modules\n",
    "- create\n",
    "- __name__\n",
    "- introducing packages\n",
    "- packages"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1737a32",
   "metadata": {},
   "source": [
    "## built-in modules"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86b640eb",
   "metadata": {},
   "source": [
    "### math module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "12e2a01e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "\n",
    "print(dir(math))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "278ba9e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "math.pi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2d6d9db8",
   "metadata": {},
   "outputs": [],
   "source": [
    "math.pow()\n",
    "\n",
    "Return x**y (x to the power of y)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5bb791e9",
   "metadata": {},
   "outputs": [],
   "source": [
    "math.factorial()\n",
    "\n",
    "Find x!."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e4f337bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "math.ceil()\n",
    "\n",
    "Return the ceiling of x as an Integral."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "89698142",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "0926e13a",
   "metadata": {},
   "source": [
    "### random module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0e797abf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "print(dir(random))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a6708bb0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random.randint(0, 20)\n",
    "\n",
    "Return random integer in range [a, b], including both end points."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b0120837",
   "metadata": {},
   "outputs": [],
   "source": [
    "random.random()\n",
    "\n",
    "random() -> x in the interval [0, 1)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "11ddf9cf",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(random.random()*50)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4e7b4ed",
   "metadata": {},
   "source": [
    "### os module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c3268b8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_AddedDllDirectory', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_check_methods', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'add_dll_directory', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "print(dir(os))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a691e078",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'E:\\\\JupyterNotes'"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "os.getcwd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04ba8a04",
   "metadata": {},
   "outputs": [],
   "source": [
    "os.mkdir(\"new_created\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "08e8d81a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "0f87ddfa",
   "metadata": {},
   "source": [
    "### sys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "48bdc890",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__', '_base_executable', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_git', '_home', '_xoptions', 'addaudithook', 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'ps3', 'pycache_prefix', 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "print(dir(sys))"
   ]
  },
  {
   "cell_type": "raw",
   "id": "9f620f20",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "1da6c42b",
   "metadata": {},
   "source": [
    "### datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "3352995a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']\n"
     ]
    }
   ],
   "source": [
    "import datetime\n",
    "print(dir(datetime))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "25fd8ab0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "datetime.datetime(2021, 9, 20, 10, 41, 49, 501005)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "datetime.datetime.now()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5fcb10ff",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "614fc54e",
   "metadata": {},
   "source": [
    "## Importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "af07bce6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd097772",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6908277e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# alias\n",
    "\n",
    "import math as m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6a059f68",
   "metadata": {},
   "outputs": [],
   "source": [
    "# only some\n",
    "\n",
    "from math import factorial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "561883e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "from math import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83e14c6c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "83c34716",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "eb25d4c2",
   "metadata": {},
   "source": [
    "## Custom modules"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "133ab6ee",
   "metadata": {},
   "source": [
    "import a module, means execute it at once."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2f809a76",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7d6a422d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39d7675c",
   "metadata": {},
   "outputs": [],
   "source": [
    "__name__ 等于 __main__ ，相当于直接运行它"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "5798526b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "__main__\n"
     ]
    }
   ],
   "source": [
    "print(__name__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a7b78c0c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "932046d8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
